package com.koron.order.overhaul.service;

import com.koron.bean.workflow.RedirectQuery;
import com.koron.common.core.business.common.service.CommonService;
import com.koron.order.common.bean.po.OrderInstructionBean;
import com.koron.order.common.bean.po.OrderSignBean;
import com.koron.order.experiment.bean.vo.ExperimentVo;
import com.koron.order.overhaul.bean.dto.WorkTicket;
import com.koron.order.overhaul.bean.entity.OverhaulOrderBean;
import com.koron.order.overhaul.bean.entity.OverhaulOrderReportBean;
import com.koron.order.overhaul.bean.query.OverhaulExperimentQuery;
import com.koron.order.overhaul.bean.query.OverhaulOrderQuery;
import com.koron.order.overhaul.bean.vo.*;
import org.koron.ebs.mybatis.SessionFactory;

import java.util.List;

/**
 * (OverhaulOrderBean)表服务接口
 *
 * @author twcao
 * @since 2021-09-29 09:49:23
 */
public interface OverhaulOrderService extends CommonService {

    OverhaulOrderDetailVO queryById(SessionFactory factory, String id);

    boolean saveOrUpdate(SessionFactory factory, OverhaulOrderBean bean);

    String updateStatus(SessionFactory factory, OverhaulOrderBean bean);

    boolean update(SessionFactory factory, OverhaulOrderBean bean);

    boolean updateState(SessionFactory factory, String id, String status);

    OverhaulOrderDetailVO deleteById(SessionFactory factory, String id);

    List<OverhaulOrderBean> queryList(SessionFactory factory, OverhaulOrderQuery query);

    /**
     * 保存或更新-草稿
     * @param factory 会话
     * @param vo 提交的实体
     * @return 返回工单id
     */
    String draft(SessionFactory factory, OverhaulOrderDraftVO vo);

    /**
     * 可提交人员列表
     * @return
     */
    List<String> allowSubmit(SessionFactory factory, String orderId);

    /**
     * 新增或保存作业指导书
     * @param factory  会话
     * @param instructions 作业指导书
     * @return
     */
    boolean saveOrUpdateInstruction(SessionFactory factory, List<OrderInstructionBean> instructions);

    /**
     * 删除作业指导书
     * @param factory
     * @param instructionId
     * @return
     */
    boolean deleteInstruction(SessionFactory factory, String instructionId);

    /**
     * 保存或更新-待派工
     * @param factory 会话
     * @param vo 提交的实体
     * @return 派工信息id
     */
    String dispatch(SessionFactory factory, OrderDispatchVO vo);

    /**
     * 根据工单id查询派工信息详情
     * @param factory 会话
     * @param orderId 工单id
     * @return
     */
    OrderDispatchVO queryDispatchInfoByOrderId(SessionFactory factory, String orderId);

    /**
     * 删除派工信息
     * @param factory 会话
     * @param orderId 工单id
     * @return
     */
    boolean deleteDispatchInfo(SessionFactory factory, String orderId);

    /**
     * 保存或更新-待执行
     * @param factory 会话
     * @param bean 实体
     * @return
     */
    boolean toExecute(SessionFactory factory, OverhaulOrderBean bean);

    /**
     * 保存或更新-执行中-执行信息
     * @param factory 会话
     * @param vo 执行信息
     * @return 执行信息id
     */
    String saveExecuteInfo(SessionFactory factory, OrderExecuteVO vo);

    /**
     * 保存或更新-执行中-表单
     * @param factory 会话
     * @param vo 表单
     * @return 表单id
     */
    OverhaulOrderMajorFormVO execute(SessionFactory factory, OverhaulOrderMajorFormVO vo);

    /**
     * 根据执行id删除执行信息
     * @param factory 会话
     * @param executeId 执行id
     * @return
     */
    boolean deleteExecuteInfoByExecuteId(SessionFactory factory, String executeId);

    /**
     * 根据工单id查询执行信息列表
     * @param factory 会话
     * @param orderId 工单id
     * @return
     */
     List<OverhaulOrderMajorVO> queryExecuteInfoByOrderId(SessionFactory factory, String orderId);

    /**
     * 更新数据记录变量
     * @param factory 会话
     * @param vo 参数
     * @return
     */
     boolean updateParam(SessionFactory factory, OverhaulOrderItemParamsVO vo);

    /**
     * 签名
     * @param factory
     * @param signBean
     * @return
     */
     boolean sign(SessionFactory factory, OrderSignBean signBean);

    /**
     * 根据作业项获取签名
     * @param factory
     * @param itemId
     * @return
     */
     List<OrderSignBean> getSignsByItemId(SessionFactory factory, String itemId);


    List<OrderSignBean> getSignsByItemIdAndOrderId(SessionFactory factory, String itemId,String orderId);

    /**
     * 设置作业表单项的值
     * @param factory 会话
     * @param item 作业表单项
     * @return 是否成功
     */
     boolean itemValue(SessionFactory factory, ItemValueVO item);

    /**
     * 保存编制大修报告
     * @param factory 会话
     * @param report 编制大修报告
     * @return
     */
     boolean prepareReport(SessionFactory factory, OverhaulOrderReportBean report);

    /**
     * 根据工单id查询编制大修报告
     * @param factory 会话
     * @param orderId 工单id
     * @return 编制大修报告详情
     */
    OverhaulOrderReportBean getPrepareReportByOrderId(SessionFactory factory, String orderId);

    /**
     * 待验收-提供工作流
     * @param factory 会话
     * @param orderId 工单id
     * @return
     */
     boolean toAccept(SessionFactory factory, String orderId);

    /**
     * 工单接收完成，完成工作流审核
     * @param factory 会话
     * @param orderId 工单id
     * @return
     */
     boolean toAcceptFinish(SessionFactory factory, String orderId);

    void createGradeOrder(SessionFactory factory, String orderId);

    Boolean workflowUpdate(SessionFactory factory, RedirectQuery redirectQuery);

    List<Integer> queryTicketByOrderId(SessionFactory factory, String orderId);

    List<WorkTicket> queryTicketListByOrderId(SessionFactory factory, String orderId);

    List<ExperimentVo> queryExperimentVoList(SessionFactory factory, OverhaulExperimentQuery query);

    /**
     * 更多里面作废工单
     * @param factory 会话
     * @param orderId 工单id
     * @return
     */
    String deprecated(SessionFactory factory, String orderId);

    List<OrderExecuteVO> getExecuteInfoByOrderId(SessionFactory factory, String orderId);
}

